import { IFsm } from "./IFsm";

/**
 * 有限状态机状态基类
 * @type 有限状态机持有者类型
 */
export interface IFsmState<OwnerT, DataT>{
    /**
     * 状态名称
     */
    readonly name:string;
    /**
     * 有限状态机初始化时调用
     * @param fsm 有限状态机引用
     */
    onInit?(fsm:IFsm<OwnerT, DataT>):void;

    /**
     * 有限状态机进入时调用
     * @param fsm 有限状态机引用
     */
    onEnter(fsm:IFsm<OwnerT, DataT>):void;

    /**
     * 有限状态机状态轮询时调用
     * @param fsm 有限状态机引用
     * @param elapseSceonds 流逝秒数
     */
    onUpdate?(fsm:IFsm<OwnerT, DataT>, elapseSceonds:number):void;

        /**
     * 有限状态机状态离开时调用
     * @param fsm 有限状态机引用
     * @param isShutdonw 是否是关闭有限状态机时触发。
     */
    onLeave?(fsm:IFsm<OwnerT, DataT>, isShutdonw:boolean):void;

    /**
     * 有限状态机状态销毁时调用
     * @param fsm 有限状态机引用
     */
    OnDestroy?(fsm:IFsm<OwnerT, DataT>):void;
}
